インフラエンジニアのためのCodeCommitで覚えるユニットテスト
私のようなインフラエンジニアの中にはPythonに興味があるかたが多いように感じています。 本記事では、CodeCommitに絡めてPythonのユニットテストに関係する2点を紹介し、ユニットテストやCodeCommitの利用イメージをお伝えします。
- Pythonでプログラムを作成、テストし、オリジンにpushする流れ
- 機能追加してプルリクエストする流れ
電卓プログラムの作成
足し算機能を持つ電卓プログラムを作成します。 作成したプログラムをテストし、オリジンにpushします。
CodeCommitでリポジトリを作成
リポジトリの作成
CodeCommitのコンソールに接続し、リポジトリを作成します。 リポジトリ名はpython-calculatorとしました。
リポジトリのクローン
リポジトリを作成すると、git cloneする手順が表示されます。 大きく以下の手順になります。
- IAMユーザーに公開鍵を登録
- SSH 設定ファイルにCodeCommitへの接続情報を記載
- ローカルにクローンを作成する
クローンに成功すると、ローカルにpython-calculatorディレクトリが作成されます。
電卓プログラムの作成
足し算の関数を作成し、calc.py
として保存します。
def plus(x,y): return x + y
足し算関数のユニットテスト
足し算関数のテストを行います。
testsディレクトリにテストファイル(test_calc.py)を配置します。
__pycache__
は自動で作成されます。
$ tree . ├── __pycache__ │ └── calc.cpython-35.pyc ├── calc.py └── tests ├── __pycache__ │ └── test_calc.cpython-35.pyc └── test_calc.py 3 directories, 4 files $
test_calc.py
は以下のようにします。
assertEqualは第1引数と第2引数がイコールになるか確認します。
テストプログラムでは、calc.py
のplus関数に引数3と5を与えて、8になるか確認します。
ユニットテストフレームワークの詳細は公式ドキュメントをご覧ください。
import unittest import calc class TestCalc(unittest.TestCase): def test_plus(self): self.assertEqual(calc.plus(3,5), 8)
ユニットテストを実行すると、"OK"になります。
$ python3 -m unittest tests.test_calc . ---------------------------------------------------------------------- Ran 1 test in 0.000s OK $
「self.assertEqual(calc.plus(3,5), 8)」を「self.assertEqual(calc.plus(2,7), 10)」に変更して、テストを実行します。 2+7は9なので、テストに失敗します。
$ python3 -m unittest tests.test_calc F ====================================================================== FAIL: test_plus (tests.test_calc.TestCalc) ---------------------------------------------------------------------- Traceback (most recent call last): File "/tests/test_calc.py", line 6, in test_plus self.assertEqual(calc.plus(2,7), 10) AssertionError: 9 != 10 ---------------------------------------------------------------------- Ran 1 test in 0.001s FAILED (failures=1) $
オリジンへのpush
オリジンにpushしましょう。
git add ./* git commit -m "initial commit" git push origin master
CodeCommitコンソールに反映されていれば、成功です。
電卓プログラムへの機能追加
作成した電卓プログラムには、足し算の機能しかありません。 引き算の機能を追加、テストし、プルリクエストします。
devブランチの作成
開発用のdevブランチを作成します。
$ git checkout -b dev Switched to a new branch 'dev' $ git branch * dev master $
引き算関数の追加
calc.py
に引き算関数(minus)を追加します。
def plus(x,y): return x + y def minus(x,y): return x - y
引き算関数のユニットテスト
引き算関数をテストします。
test_minus関数をtest_calc.py
に追加します。
10引く3をminus関数で実行し、7になるかをテストします。
import unittest import calc class TestCalc(unittest.TestCase): def test_plus(self): self.assertEqual(calc.plus(3,5), 8) def test_minus(self): self.assertEqual(calc.minus(10,3), 7)
ユニットテストを実行すると、OKになります。
$ python3 -m unittest tests.test_calc .. ---------------------------------------------------------------------- Ran 2 tests in 0.000s OK $
プルリクエストの作成
devブランチをオリジンにpushします。
git add ./* git commit -m "add minus function" git push origin dev
CodeCommitコンソールに反映されます。
プルリクエストの作成
プルリクエストの作成を選択します。
devとmasterを比較します。 コンフリクトがなく、マージ可能なことがわかります。
変更内容が表示されます。 minus関数が追加されていることがわかります。
タイトル、説明を記載してプルリクエストを作成します。
プルリクエストのマージ
プルリクエストをマージします。
引き算機能(minus関数)がmasterに反映されました。
さいごに
CodeCommitに絡めてPythonのユニットテストを紹介しました。 電卓プログラムに足し算の関数を作成して、ユニットテストを行いました。 テストに合格したプログラムはCodeCommitにpushしました。
devブランチを作成し、引き算の関数を追加しました。 引き算についてもユニットテストを行い、合格したプログラムをプルリクエストしました。 CodeCommitコンソールから、devとmasterの差分を確認し、マージしました。
本記事がCodeCommitやユニットテストの理解に役立てば幸いです。